/*!
 * \class LogRcorder
 *
 * \brief 日志对象基类
 *
 * \author Bryceyam
 * \date ʮһ�� 2025
 */
#pragma once
#include <string>
#include <memory>
#include "LogFormat.h"

typedef std::unique_ptr<LogFormat> LogFormatPtr;

class LOGRECORDER_API LogRecorder
{
public:
	/*
	*@brief      日志接口
	*@param[in]  level日志等级 log日志内容 file日治所在文件 line日志所在行数
	*/
	virtual void doWrite(LogLevel level, const std::string& log, const std::string& file, int line) = 0;

	/*
	*@brief     设置日志格式，默认格式为[当前时间][日志等级][所在文件：所在函数][线程id][日志内容]
	*@param[in] 日志格式对象
	*/
	void setFormat(LogFormatPtr format);

	/*
	*@brief     设置日志最低等级，默认格式为DEBUG
	*@param[in] 日志等级
	*/
	void setLevel(LogLevel level);

	virtual ~LogRecorder();

protected:
	LogLevel mLevel;//最低日志等级
	std::unique_ptr<LogFormat> mLogFormat;

	LogRecorder() :mLogFormat(std::make_unique<LogFormat>()), mLevel(LogLevel::DEBUG) {};

	/*
	*@brief 日志等级转字符串
	*@param[in]  level日志等级
	*@return     日志等级
	*/
	const std::string levelToStr(LogLevel level);
};

